package com.edevp.common.mybatis.service;


import com.edevp.common.mybatis.dto.PageDTO;
import com.edevp.common.mybatis.entity.BaseEntity;
import com.edevp.common.mybatis.mapper.Wrapper;

import java.util.List;

/**
 * ${DESCRIPTION}
 *
 * @author Lean
 * @create 2020-02-16 9:58 PM
 **/
public interface BaseService <T extends BaseEntity> {
	/**
	 * 根据主键查询
	 * @param id 主键
	 * @return T 实体
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	T get(String id);
	/**
	 * 新增
	 * @param entity 实体
	 * @return int
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	int insert(T entity);
	/**
	 * 修改
	 * @param entity 实体
	 * @return int
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	int update(T entity);
	/**
	 * 根据主键删除
	 * @param id 主键
	 * @return int
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	int delete(String id);
	/**
	 * 根据主键删除
	 * @param id 主键
	 * @return int
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	int deleteByPrimaryKey(String id);
	/**
	 * 查询返回
	 * @return List<T>
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	List<T> findAll();
	/**
	 * 根据条件查询单个实体
	 * @param wrapper 条件
	 * @return T
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	T findOne(Wrapper<T> wrapper);
	/**
	 * 根据条件查询单个实体列表
	 * @param wrapper 条件
	 * @return T
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	List<T> find(Wrapper<T> wrapper);
	/**
	 * 查询分页
	 * @param pageIndex 分页索引
	 * @param pageSize 分页大小
	 * @return PageDTO<T>
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	PageDTO<T> findByPage(int pageIndex, int pageSize);
	/**
	 * 查询分页
	 * @param pageIndex 分页索引
	 * @param pageSize 分页大小
	 * @param wrapper 条件
	 * @return PageDTO<T>
	 * @author Lean
	 * @create 4/24/2020 11:16 AM
	 **/
	PageDTO<T> findByPage(int pageIndex, int pageSize, Wrapper<T> wrapper);
}